package com.tensquare.web.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

@Component
public class ManagerFilter extends ZuulFilter {
   /*
   *filterType：返回一个字符串代表过滤器的类型，在zuul中定义了四种不同生命周期的过
滤器类型，具体如下：
pre ：可以在请求被路由之前调用
route ：在路由请求时候被调用
post ：在route和error过滤器之后被调用
error ：处理请求时发生错误时被调用
   *
   *
   * */
    @Override
    public String filterType() {
        return "pre";

    }


    /*
    越小越先执行
    * filterOrder ：通过int值来定义过滤器的执行顺序*/

    @Override
    public int filterOrder() {
        return 0;
    }

    /*
    * shouldFilter ：返回一个boolean类型来判断该过滤器是否要执行，所以通过此函数可
实现过滤器的开关。在上例中，我们直接返回true，所以该过滤器总是生效
    * */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /*
    * run ：过滤器的具体逻辑。
    * */
    @Override
    public Object run() throws ZuulException {

        //得到request的上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        //得到request域
        HttpServletRequest request = currentContext.getRequest();
        //得到头部信息
        String header = request.getHeader("Authorization");
        if (header!=null){
            //把头部信息继续往下传
            currentContext.addZuulRequestHeader("Authorization",header);
        }
        return null;
    }
}
